Lab16 Flappy Bird Game

110065508 李丞恩

本次的lab要以強化學習的方式實做一個玩flappy bird的AI,需要用到pygame這個package。然而我無法下載到指定的1.9.6版本,而2.0.0會出錯,不過換成2.0.2就沒問題了,全部跑得動。相關的成果在第四大點「Flappy Bird Game - SARSA version」之中。

一. Gridworld的搭建

二. Markov Decision Process(MDP)

1. Value iteration

2. Policy iteration

三. Flappy Bird Game - Q-learning version

1. Q-learning Agent的實作

2. Q-learning agent的訓練

3. Q-learning agent訓練成果的展示

4. Q-learning agent存活時間對迭代次數作圖

5. Q-learning agent獎勵對迭代次數作圖

四. Flappy Bird Game - SARSA version

1. SARSA Agent的實作

根據SARSA演算法,其實跟Q-learning相比並沒有差很多,因此只需要更改update_policy函式就可以了。

2. SARSA agent的訓練

必要注意,演算法中的choose A from S using policy derived from Q是在進入step的迴圈外面。

3. SARSA agent訓練成果的展示

4. SARSA agent存活時間對迭代次數作圖

5. SARSA agent獎勵對迭代次數作圖

6. 討論

先討論存活時間對迭代次數作圖,Q-learning一直到訓練的最後第80個episode才有所增長,而相同幅度的增長在SARSA的圖形中卻在第60個episode就已經出現了。然而SARSA的lifetime也立刻又跌下去,呈現出劇烈的震盪。而reward對episode作圖也產生類似的趨勢。回看一下訓練過程,我發現兩種agent的死法幾乎都是因為狀到了上面的柱子而死掉,Q-learning可能是因為來不及掉到空隙的高度而死掉,而SARSA會力求從空隙的中間通過,但是在撞到柱子前會突然往上衝,並因此撞到柱子。因此我覺得可以把兩者的discount factor調低一點(例如到0.9或0.8),讓兩者對之後的reward不要這麼敏感,或許結果會更好。